#coding=utf-8

# 导入自定义转换器的基类
from werkzeug.routing import BaseConverter

from flask import session,jsonify

from iHome.utils.response_code import RET

import functools


# 定义正则匹配的转换器
class RegexConverter(BaseConverter):
    # 重写它的__init__方法
    def __init__(self,url_map,*args):
        # 调用父类的__init__方法，传入当前所有的；路由对象这个参数
        super(RegexConverter, self).__init__(url_map)
        # regex是父类的一个属性，对这个属性重新赋值，让他等于正则表达式匹配到的第1个值
        self.regex=args[0]


# 当 完成了定义正则转换器类的定义之后，需要将它添加在路由视图映射当中
# 在iHome文件夹的__init__.py文件之中的creat_app()方法内，完成了这个步奏之后，
# 就可以在静态访问路由之中 web_html之中使用它了。


# f 是装饰器要装饰的函数
def login_required(f):
    '''判断用户是否登录的装饰器'''
    @functools.wraps(f)
    # 修饰内层函数，以防止当前装饰器去修改被装饰的函数的__name__属性，比如说函数名
    def wrapper(*args,**kwargs): # inner()函数接受的参数是装饰器要装饰函数需要的参数
        user_id=session.get("user_id")
        if not user_id:
            # 直接返回没有登录的json
            return jsonify(errno=RET.SESSIONERR,errmsg="用户未登录")
        else:
            return f(*args,**kwargs)

    return wrapper